/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucue.ptc.gco.ws;

import edu.ucue.ptc.gco.mdl.Categoria;
import edu.ucue.ptc.gco.mdl.Producto;
import edu.ucue.ptc.gco.ngc.CategoriaManagerLocal;
import edu.ucue.ptc.gco.ngc.LoteManagerLocal;
import edu.ucue.ptc.gco.ngc.ProductoManagerLocal;
import edu.ucue.ptc.gco.ngc.UsuarioManagerLocal;
import edu.ucue.ptc.gco.util.AtributoInvalidoException;
import edu.ucue.ptc.gco.util.ElementoYaExisteException;
import edu.ucue.ptc.gco.util.InsuficienteStockException;
import java.util.List;
import javax.ejb.EJB;
import javax.jws.WebService;
import javax.ejb.Stateless;
import javax.jws.Oneway;
import javax.jws.WebMethod;
import javax.jws.WebParam;

/**
 *
 * @author Marcelo
 */
@WebService(serviceName = "ProductoWebService")
@Stateless()
public class ProductoWebService {
    @EJB
    private ProductoManagerLocal ejbRef;// Add business logic below. (Right-click in editor and choose
    
    // "Web Service > Add Operation"

    @WebMethod(operationName = "crearProducto")
    public void crearProducto(@WebParam(name = "producto") Producto producto,@WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException, ElementoYaExisteException, Exception {
        
        ejbRef.crear(producto, nombreUsuario, contrasenaUsuario);
        
    }

    @WebMethod(operationName = "actualizarProducto")
    public void actualizarProducto(@WebParam(name = "producto") Producto producto,@WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException, Exception {
        
        ejbRef.actualizar(producto, nombreUsuario, contrasenaUsuario);
    }

    @WebMethod(operationName = "eliminarProducto")
    public void eliminarProducto(@WebParam(name = "producto") Producto producto,@WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException, Exception {
        
        ejbRef.eliminar(producto, nombreUsuario, contrasenaUsuario);
    }
    
    @WebMethod(operationName = "eliminarProductoPorId")
    public void eliminarProductoPorId(@WebParam(name = "idProducto") int idProducto,@WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException, Exception {
        
        ejbRef.eliminarPorId(idProducto, nombreUsuario, contrasenaUsuario);
    }
    
    /*
    @WebMethod(operationName = "testProducto")
    public void testProducto(@WebParam(name = "id") int id) throws AtributoInvalidoException {
        ejbRef.testProducto();
        
    } */   
    
    @WebMethod(operationName = "listarTodosProductos")
    public List<Producto> listarTodosProductos(@WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException, Exception {
        
        return ejbRef.listarTodos( nombreUsuario, contrasenaUsuario);
    }

    @WebMethod(operationName = "obtenerPorIdProducto")
    public Producto obtenerPorIdProducto(@WebParam(name = "idProducto") int idProducto,@WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException, Exception {
        
        return ejbRef.obtenerPorId(idProducto, nombreUsuario, contrasenaUsuario);
    }
    
    @WebMethod(operationName = "obtenerTotalStock")
    public Long obtenerTotalStock(@WebParam(name = "idProducto") int idProducto,@WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException, Exception {
        
        return ejbRef.obtenerTotalStock(idProducto, nombreUsuario, contrasenaUsuario);
    }    
    
    @WebMethod(operationName = "disminuirStock")
    public void disminuirStock(@WebParam(name = "idProducto") int idProducto, @WebParam(name = "cantidad") int cantidad, @WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException, InsuficienteStockException, Exception {
        
        ejbRef.disminuirStock(idProducto, cantidad, nombreUsuario, contrasenaUsuario);
    }
}
